perf(android): [SDK Overhead Reduction 4] Use default timezone directly#5587
Open
adinauer wants to merge 4 commits into
Open
perf(android): [SDK Overhead Reduction 4] Use default timezone directly#5587adinauer wants to merge 4 commits into
adinauer wants to merge 4 commits into
Conversation
Avoid constructing a Calendar only to read the default device timezone. The locale passed to Calendar does not affect the timezone value, so TimeZone.getDefault returns the same value with less work during device context collection. Co-Authored-By: Claude <noreply@anthropic.com>
This was referenced Jun 22, 2026
Merged
📲 Install BuildsAndroid
|
Contributor
Performance metrics 🚀
|
This was referenced Jun 22, 2026
Keep the Calendar-based timezone path for Android 13+ locales that carry a Unicode tz extension. This preserves the existing device timezone behavior while keeping the direct default timezone fast path for normal locales. Co-Authored-By: Claude <noreply@anthropic.com>
This was referenced Jun 23, 2026
8 tasks
Member
Author
|
Cursor review |
Member
Author
|
@sentry review |
There was a problem hiding this comment.
✅ Bugbot reviewed your changes and found no new issues!
Comment @cursor review or bugbot run to trigger another review on this PR
Reviewed by Cursor Bugbot for commit 2bcedec. Configure here.
runningcode
reviewed
Jun 24, 2026
runningcode
left a comment
Contributor
There was a problem hiding this comment.
This one is a bit confusing and I'm not sure about the edge cases. Do we have an idea what the performance benefit is here?
Member
Author
|
Benchmark results invoking the util on a newer Android version (API level 34) that does not enter the inner if regarding "tz": Results for inner code triggered, e.g. by "en-US-u-tz-usnyc": Both benchmarks ran 20k iterations on the util. |
Member
Author
|
Some more info on the "tz": |
Document why Android 13+ locales with Unicode timezone extensions keep using Calendar while normal locales use the default timezone directly for performance. Co-Authored-By: Claude <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
PR Stack (SDK Overhead Reduction)
📜 Description
Replace the normal Android device timezone path with
TimeZone.getDefault()instead of constructing aCalendarjust to read its timezone.One compatibility detail is preserved: Android 13+
Calendar.getInstance(locale)can honor a locale Unicodetzextension (for exampleen-US-u-tz-usnyc). For those rare locales, the code keeps the Calendar path so the SDK continues reporting the same timezone as before. On Android N through Android 12, and for normal locales without atzextension, the locale did not affect the timezone value.💡 Motivation and Context
Part of the SDK Overhead Reduction stack. In the common case, device context collection only needs the process default timezone.
TimeZone.getDefault()is available on Android API 21 and Java 8, and avoids constructing aCalendarand reading locale configuration just to retrieve the same timezone.The previous API 24+ branch used the first
Configurationlocale, but Android N through Android 12 did not use that locale to select the timezone. Android 13 addedtzUnicode extension support toCalendar.getInstance(locale), so this PR preserves that behavior with a narrow fallback while keeping the fast direct-default path for all other cases.💚 How did you test it?
./gradlew :sentry-android-core:testDebugUnitTest --tests io.sentry.android.core.DeviceInfoUtilTest— all tests passtzextension (en-US-u-tz-usnyc)./gradlew spotlessApply apiDump— no API surface changes📝 Checklist
sendDefaultPIIis enabled.🔮 Next steps
More SDK overhead reduction PRs in this stack.